﻿using System;
using System.Collections.Generic;

namespace JTLeigh.Commerce.Spencer.Features.ProductFeedback.Common.Entities
{

	/// <summary>
	/// Represents product feedback metadata common to all product feedback.
	/// </summary>
	public class ProductFeedbackMetadata
	{

		#region Constructors

		/// <summary>
		/// Initializes a new instance of the <see cref="ProductFeedbackMetadata"/> class.
		/// </summary>
		public ProductFeedbackMetadata()
		{
            Badges = new Dictionary<Guid, ProductFeedbackBadge>();
			RatingAttributes = new Dictionary<Guid, ProductRatingAttribute>();
			RecommendationAttributes = new Dictionary<Guid, ProductRecommendationAttribute>();
			ReviewAttributes = new Dictionary<Guid, ProductReviewAttribute>();
		}

		#endregion // Constructors

		#region Properties

        /// <summary>
        /// Gets the dictionary of product feedback badges.
        /// </summary>
        /// <value>A <see cref="Dictionary{TKey,TValue}"/> of <see cref="ProductFeedbackBadge"/> 
        /// keyed by badge identifier <see cref="Guid"/>.</value>
        public Dictionary<Guid, ProductFeedbackBadge> Badges { get; private set; }

        /// <summary>
		/// Gets the dictionary of product rating attributes.
		/// </summary>
		/// <value>A <see cref="Dictionary{TKey,TValue}"/> of <see cref="ProductRatingAttribute"/> 
		/// keyed by attribute identifier <see cref="Guid"/>.</value>
		public Dictionary<Guid, ProductRatingAttribute> RatingAttributes { get; private set; }

		/// <summary>
		/// Gets the dictionary of product recommendation attributes.
		/// </summary>
		/// <value>A <see cref="Dictionary{TKey,TValue}"/> of <see cref="ProductRecommendationAttribute"/> 
		/// keyed by attribute identifier <see cref="Guid"/>.</value>
		public Dictionary<Guid, ProductRecommendationAttribute> RecommendationAttributes { get; private set; }

		/// <summary>
		/// Gets the dictionary of product review attributes.
		/// </summary>
		/// <value>A <see cref="Dictionary{TKey,TValue}"/> of <see cref="ProductReviewAttribute"/> 
		/// keyed by attribute identifier <see cref="Guid"/>.</value>
		public Dictionary<Guid, ProductReviewAttribute> ReviewAttributes { get; private set; }

		#endregion // Properties

	}

}
